#include "stm32f10x.h"                  // Device header
uint16_t size;
void MyDMA_Init(uint32_t src,uint32_t dst,uint16_t len)
{
   	size=len;//记录数组长度
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//初始化DMA时钟
   
	//初始化DMA
    DMA_InitTypeDef DMA_InitStructure;
	
	DMA_InitStructure.DMA_PeripheralBaseAddr=src;//指定外设基地址
	DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;//指定外设数据长度
	DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Enable;//源地址自增
	
	DMA_InitStructure.DMA_MemoryBaseAddr=dst;//指定存储器基地址
	DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;//指定存储器数据长度
	DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Disable;//目标地址不自增
	
	DMA_InitStructure.DMA_BufferSize=len;//指定待转运数据个数
	DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//指定方向：从外设搬运至存储器
	DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//不选择“存储器到存储器”传输，也即选择外部硬件触发
	DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;//非循环模式，软件手动重置DMA
	DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;//设置优先级
    DMA_Init(DMA1_Channel4,&DMA_InitStructure);//DMA初始化完成
	
	DMA_Cmd(DMA1_Channel4,DISABLE);//注意：USART1_TX只能触发DMA1的4号通道
}

void Start_DMA(void)
{
  DMA_Cmd(DMA1_Channel4,DISABLE);//规定：必须先失能DMA后再重置DMA
  DMA_SetCurrDataCounter(DMA1_Channel4,size);//重置DMA
  DMA_Cmd(DMA1_Channel4,ENABLE);//上电开始转换
}
